6f7d86137ed60682263ebc3b216e128ef445cacd,src/main/java/hudson/plugins/plot/XMLSeries.java,XMLSeries,loadSeries,#FilePath#PrintStream#,127
Before Change
// load existing plot file
inputSource = new InputSource(in);
} catch (Exception e) {
LOGGER.warning("Exception reading plot series data from: " + seriesFiles[0] + " " + e);
return null;
}
if (LOGGER.isLoggable(defaultLogLevel))
LOGGER.log(defaultLogLevel,"NodeType " + nodeTypeString + " : " + nodeType);
if (LOGGER.isLoggable(defaultLogLevel))
LOGGER.log(defaultLogLevel,"Loaded XML Plot file: " + getFile());
XPath xpath = XPathFactory.newInstance().newXPath();
Object xmlObject = xpath.evaluate(xpathString, inputSource, nodeType);
/*
* If we have a nodeset, we need multiples, otherwise we just need one value, and can do a toString()
* to set it.
*/
if (nodeType.equals(XPathConstants.NODESET))
{
NodeList nl = (NodeList) xmlObject;
if (LOGGER.isLoggable(defaultLogLevel))
LOGGER.log(defaultLogLevel,"Number of nodes: " + nl.getLength());
Map<Node, List<Node>> parentNodeMap = new HashMap<Node, List<Node>>();
for (int i = 0; i < nl.getLength(); i++) {
Node node = nl.item(i);
Node parent = node.getParentNode();
List<Node> nodeList = parentNodeMap.get(parent);
// TODO: Temp debug code:
Object obj = nl.item(i);
Object obj2 = node.getFirstChild();
// Make sure these nodes aren't all from the parent node:
if (node.getFirstChild() != null) {
if (nodeList == null) {
nodeList = new LinkedList<Node>();
parentNodeMap.put(parent, nodeList);
}
nodeList.add(node);
}
}
int numParents = parentNodeMap.size();
int numNodes = nl.getLength();
// If we found nodes with common parents, combine them:
if ((parentNodeMap.size() != 0) && (parentNodeMap.size() < nl.getLength())) {
Set<Map.Entry<Node, List<Node>>> entries = parentNodeMap.entrySet();
// TODO: Put in logging messages about what is being processed.
// If there are multiple names and multiple values, we'll always use the
// latest one.
for (Map.Entry<Node, List<Node>> entry : entries) {
String name = null;
String value = null;
List<Node> nodeList = entry.getValue();
for (Node node : nodeList) {
try {
Double.parseDouble(node.getTextContent());
value = node.getTextContent().trim();
} catch (NumberFormatException nfe) {
name = node.getTextContent().trim();
}
}
addValueToList(ret, name, value);
}
} else {
for (int i = 0; i < nl.getLength(); i++) {
Node n = nl.item(i);
if (n != null && n.getLocalName() != null && n.getTextContent() != null) {
addNodeToList(ret, n);
}
}
}
} else if (nodeType.equals(XPathConstants.NODE)) {
addNodeToList(ret, (Node) xmlObject);
} else {
// otherwise we have a single type and can do a toString on it.
if (xmlObject instanceof NodeList) {
NodeList nl = (NodeList) xmlObject;
if (LOGGER.isLoggable(defaultLogLevel))
LOGGER.log(defaultLogLevel,"Number of nodes: " + nl.getLength());
for (int i = 0; i < nl.getLength(); i++) {
Node n = nl.item(i);
if (n != null && n.getLocalName() != null && n.getTextContent() != null) {
addValueToList(ret, label, xmlObject);
}
}
} else {
addValueToList(ret, label, xmlObject);
}
}
return ret.toArray(new PlotPoint[ret.size()]);
} catch (XPathExpressionException e) {
//ignore
Throwable cause = e.getCause();
if (LOGGER.isLoggable(defaultLogLevel))
LOGGER.log(defaultLogLevel,"XPathExpressionException for XPath '" + getXpath() + "': " + cause.getMessage());
} finally {
if (in != null) {
try {
After Change
try {
seriesFiles = workspaceRootDir.list(getFile());
} catch (Exception e) {
LOGGER.log(Level.SEVERE, "Exception trying to retrieve series files", e);
return null;
}
if (ArrayUtils.isEmpty(seriesFiles)) {
LOGGER.info("No plot data file found: " + getFile());
return null;
}
try {
if (LOGGER.isLoggable(defaultLogLevel))
LOGGER.log(defaultLogLevel,"Loading plot series data from: " + getFile());
in = seriesFiles[0].read();
// load existing plot file
inputSource = new InputSource(in);
} catch (Exception e) {
LOGGER.log(Level.SEVERE, "Exception reading plot series data from " + seriesFiles[0], e);
return null;
}
if (LOGGER.isLoggable(defaultLogLevel))
LOGGER.log(defaultLogLevel,"NodeType " + nodeTypeString + " : " + nodeType);
if (LOGGER.isLoggable(defaultLogLevel))
LOGGER.log(defaultLogLevel,"Loaded XML Plot file: " + getFile());
XPath xpath = XPathFactory.newInstance().newXPath();
Object xmlObject = xpath.evaluate(xpathString, inputSource, nodeType);
/*
* If we have a nodeset, we need multiples, otherwise we just need one value, and can do a toString()
* to set it.
*/
if (nodeType.equals(XPathConstants.NODESET))
{
NodeList nl = (NodeList) xmlObject;
if (LOGGER.isLoggable(defaultLogLevel))
LOGGER.log(defaultLogLevel,"Number of nodes: " + nl.getLength());
Map<Node, List<Node>> parentNodeMap = new HashMap<Node, List<Node>>();
for (int i = 0; i < nl.getLength(); i++) {
Node node = nl.item(i);
Node parent = node.getParentNode();
List<Node> nodeList = parentNodeMap.get(parent);
// TODO: Temp debug code:
Object obj = nl.item(i);
Object obj2 = node.getFirstChild();
// Make sure these nodes aren't all from the parent node:
if (node.getFirstChild() != null) {
if (nodeList == null) {
nodeList = new LinkedList<Node>();
parentNodeMap.put(parent, nodeList);
}
nodeList.add(node);
}
}
int numParents = parentNodeMap.size();
int numNodes = nl.getLength();
// If we found nodes with common parents, combine them:
if ((parentNodeMap.size() != 0) && (parentNodeMap.size() < nl.getLength())) {
Set<Map.Entry<Node, List<Node>>> entries = parentNodeMap.entrySet();
// TODO: Put in logging messages about what is being processed.
// If there are multiple names and multiple values, we'll always use the
// latest one.
for (Map.Entry<Node, List<Node>> entry : entries) {
String name = null;
String value = null;
List<Node> nodeList = entry.getValue();
for (Node node : nodeList) {
try {
Double.parseDouble(node.getTextContent());
value = node.getTextContent().trim();
} catch (NumberFormatException nfe) {
LOGGER.log(Level.SEVERE, "Exception converting to number", nfe);
name = node.getTextContent().trim();
}
}
addValueToList(ret, name, value);
}
} else {
for (int i = 0; i < nl.getLength(); i++) {
Node n = nl.item(i);
if (n != null && n.getLocalName() != null && n.getTextContent() != null) {
addNodeToList(ret, n);
}
}
}
} else if (nodeType.equals(XPathConstants.NODE)) {
addNodeToList(ret, (Node) xmlObject);
} else {
// otherwise we have a single type and can do a toString on it.
if (xmlObject instanceof NodeList) {
NodeList nl = (NodeList) xmlObject;
if (LOGGER.isLoggable(defaultLogLevel))
LOGGER.log(defaultLogLevel,"Number of nodes: " + nl.getLength());
for (int i = 0; i < nl.getLength(); i++) {
Node n = nl.item(i);
if (n != null && n.getLocalName() != null && n.getTextContent() != null) {
addValueToList(ret, label, xmlObject);
}
}
} else {
addValueToList(ret, label, xmlObject);
}
}
return ret;
} catch (XPathExpressionException e) {
LOGGER.log(Level.SEVERE, "XPathExpressionException for XPath '" + getXpath() + "'", e);
} finally {
IOUtils.closeQuietly(in);
}